home *** CD-ROM | disk | FTP | other *** search
/ Programming Sound Cards / Programming Sound Cards.iso / sound_87 / vtscreen.pas < prev    next >
Pascal/Delphi Source File  |  1995-01-01  |  9KB  |  320 lines

  1. UNIT VTScreens;
  2.  
  3. INTERFACE
  4.  
  5. USES VTWins, VTCfg, VTPartitura,
  6.      SongUnit,
  7.      SwapManager,
  8.      Output43, Vid43;
  9.  
  10.  
  11. {
  12. CONST
  13.   SegTopLine      : PAoW = NIL;
  14.   Seg2ndLine      : PAoW = NIL;
  15.   SegSamples      : PAoW = NIL;
  16.   SegOscillosc    : PAoW = NIL;
  17.   SegMenus        : PAoW = NIL;
  18.   SegSmallPart    : PAoW = NIL;
  19.   SegBigPart      : PAoW = NIL;
  20.   SegCredits      : PAoW = NIL;
  21. }
  22. VAR
  23.   TopLineHandle   : TSwapHandle;
  24.   _2ndLineHandle  : TSwapHandle;
  25.   SamplesHandle   : TSwapHandle;
  26.   OscilloscHandle : TSwapHandle;
  27.   MenusHandle     : TSwapHandle;
  28.   SmallPartHandle : TSwapHandle;
  29.   BigPartHandle   : TSwapHandle;
  30.   CreditsHandle   : TSwapHandle;
  31.  
  32. CONST
  33.   wfTopLine   = $0001;
  34.   wf2ndLine   = $0002;
  35.   wfSamples   = $0004;
  36.   wfOscillosc = $0008;
  37.   wfMenus     = $0010;
  38.   wfSmallPart = $0020;
  39.   wfBigPart   = $0040;
  40.   wfCredits   = $0080;
  41.  
  42.   ActiveWindows : WORD = 0;
  43.  
  44.   CreditWins          = wfTopLine + wfCredits;
  45.   BigWins             = wfTopLine + wfBigPart;
  46.   Small_SamplesWins   = wfTopLine + wf2ndLine + wfSamples   + wfMenus + wfSmallPart;
  47.   Small_OscilloscWins = wfTopLine + wf2ndLine + wfOscillosc + wfMenus + wfSmallPart;
  48.  
  49.  
  50.  
  51.  
  52. PROCEDURE InitVTScreens(VAR Song: TSong);
  53. PROCEDURE RefreshVTScreens;
  54.  
  55. PROCEDURE SetCredits;
  56. PROCEDURE SetBig;
  57. PROCEDURE SetSmall_Samples;
  58. PROCEDURE SetSmall_Oscillosc;
  59. PROCEDURE SetNothing;
  60. PROCEDURE SetUser(w: WORD);
  61.  
  62.  
  63.  
  64.  
  65. IMPLEMENTATION
  66.  
  67. USES SongElements;
  68.  
  69.  
  70. VAR
  71.   VirtualScreen : ARRAY[1..80*43] OF WORD;
  72.   TempBuffer    : ARRAY[1..80*43] OF WORD;
  73.  
  74. CONST
  75.   NoDots : BOOLEAN = FALSE;
  76.  
  77.  
  78.  
  79. PROCEDURE PutDot;
  80.   BEGIN
  81.     IF NOT NoDots THEN
  82.       Write('o');
  83.   END;
  84.   
  85.  
  86.  
  87. PROCEDURE MySaveW(VAR Handle: TSwapHandle; x, y, w, h: WORD);
  88.   BEGIN
  89.     StoreWindow(@TempBuffer, x, y, w, h);
  90.     IF NOT NoDots THEN
  91.       Handle.Init;
  92.     Handle.Write(TempBuffer, SavedWindowSize(@TempBuffer));
  93.   END;
  94.  
  95.  
  96. PROCEDURE InitVTScreens(VAR Song: TSong);
  97.   VAR
  98.     SaveSeg : WORD;
  99.     SaveOfs : WORD;
  100.   BEGIN
  101.                                                                           PutDot;
  102.     SaveSeg := ScrSegment;
  103.     SaveOfs := ScrOffset;
  104.     ScrSegment := SEG(VirtualScreen); 
  105.     ScrOffset  := OFS(VirtualScreen);
  106.  
  107.     InitWinScreen;                                                        PutDot;
  108.     InitWinTopLine;                                                       PutDot;
  109.     InitWin2ndLine;                                                       PutDot;
  110.     InitWinSamples;                                                       PutDot;
  111.     RefreshModuleInfo(Song);                                              PutDot;
  112.     WITH wTopLine   DO MySaveW(TopLineHandle,      x,   y, w,   h-1);     PutDot;
  113.     WITH wSamples   DO MySaveW(SamplesHandle,      x,   y, w-1, h-1);     PutDot;
  114.  
  115.     IF NOT NoDots THEN
  116.       BEGIN
  117.  
  118.         InitWinMenus;                                                     PutDot;
  119.         InitWinPart;                                                      PutDot;
  120.  
  121.         WITH w2ndLine   DO MySaveW(_2ndLineHandle,     x,   y, w,   h-1); PutDot;
  122.         WITH wMenus     DO MySaveW(MenusHandle,        x,   y, w,   h-1); PutDot;
  123.         WITH wPartSmall DO MySaveW(SmallPartHandle,    x,   y, w,   h  ); PutDot;
  124.  
  125.         InitWinOscillosc;                                                 PutDot;
  126.         InitWinPart;                                                      PutDot;
  127.         WITH wOscillosc DO MySaveW(OscilloscHandle,    x,   y, w,   h-1); PutDot;
  128.  
  129.         InitWinBigPart;                                                   PutDot;
  130.         WITH wPartBig   DO MySaveW(BigPartHandle,      x,   y, w,   h  ); PutDot;
  131.  
  132.         InitWinCredits;                                                   PutDot;
  133.         WITH wCredits   DO MySaveW(CreditsHandle,      x,   y, w,   h  ); PutDot;
  134.  
  135.       END;
  136.  
  137.     ScrSegment := SaveSeg;
  138.     ScrOffset  := SaveOfs;
  139.  
  140.     NoDots := TRUE;
  141.  
  142.   END;
  143.  
  144.  
  145. (*
  146. PROCEDURE InitVTScreens;
  147.   VAR
  148.     SaveSeg : WORD;
  149.     SaveOfs : WORD;
  150.   BEGIN
  151.                                                                       PutDot;
  152.     SaveSeg := ScrSegment;
  153.     SaveOfs := ScrOffset;
  154.     ScrSegment := SEG(VirtualScreen); 
  155.     ScrOffset  := OFS(VirtualScreen);
  156.  
  157.     InitWinScreen;                                                    PutDot;
  158.     InitWinTopLine;                                                   PutDot;
  159.     InitWin2ndLine;                                                   PutDot;
  160.     InitWinSamples;                                                   PutDot;
  161.     RefreshModuleInfo;                                                PutDot;
  162.     WITH wTopLine   DO SaveWindow(SegTopLine,      x,   y, w,   h-1); PutDot;
  163.     WITH wSamples   DO SaveWindow(SegSamples,      x,   y, w-1, h-1); PutDot;
  164.  
  165.     IF SegOscillosc = NIL THEN
  166.       BEGIN
  167.  
  168.         InitWinMenus;                                                     PutDot;
  169.         InitWinPart;                                                      PutDot;
  170.  
  171.         WITH w2ndLine   DO SaveWindow(Seg2ndLine,      x,   y, w,   h-1); PutDot;
  172.         WITH wMenus     DO SaveWindow(SegMenus,        x,   y, w,   h-1); PutDot;
  173.         WITH wPartSmall DO SaveWindow(SegSmallPart,    x,   y, w,   h  ); PutDot;
  174.  
  175.         InitWinOscillosc;                                                 PutDot;
  176.         InitWinPart;                                                      PutDot;
  177.         WITH wOscillosc DO SaveWindow(SegOscillosc,    x,   y, w,   h-1); PutDot;
  178.  
  179.         InitWinBigPart;                                                   PutDot;
  180.         WITH wPartBig   DO SaveWindow(SegBigPart,      x,   y, w,   h  ); PutDot;
  181.  
  182.         InitWinCredits;                                                   PutDot;
  183.         WITH wCredits   DO SaveWindow(SegCredits,      x,   y, w,   h  ); PutDot;
  184.  
  185.       END;
  186.  
  187.     ScrSegment := SaveSeg;
  188.     ScrOffset  := SaveOfs;
  189.  
  190.     NoDots := TRUE;
  191.  
  192.   END;
  193. *)
  194.  
  195. PROCEDURE DoDeactivate(VAR w: TWindow);
  196.   BEGIN
  197.     w.vis  := FALSE;
  198.     w.forz := FALSE;
  199.     w.act  := FALSE;
  200.   END;
  201.  
  202.  
  203. PROCEDURE DoActivate(VAR w: TWindow; VAR Handle: TSwapHandle);
  204.   BEGIN
  205.     Handle.Read(TempBuffer, SizeOf(TempBuffer));
  206.     RestoreWindow(@TempBuffer);
  207.     w.vis  := TRUE;
  208.     w.forz := TRUE;
  209.     w.act  := TRUE;
  210.   END;
  211.  
  212.  
  213. {
  214. PROCEDURE DoActivate(VAR w: TWindow; SavePtr: PAoW);
  215.   BEGIN
  216.     RestoreWindow(SavePtr);
  217.     w.vis  := TRUE;
  218.     w.forz := TRUE;
  219.     w.act  := TRUE;
  220.   END;
  221. }
  222.  
  223. PROCEDURE DeactivateWins(NewWins: WORD);
  224.   VAR
  225.     f : WORD;
  226.   BEGIN
  227.     f := (NOT NewWins) AND ActiveWindows;
  228.     IF (f AND wfTopLine)   <> 0 THEN DoDeactivate(wTopLine);
  229.     IF (f AND wf2ndLine)   <> 0 THEN DoDeactivate(w2ndLine);
  230.     IF (f AND wfSamples)   <> 0 THEN DoDeactivate(wSamples);
  231.     IF (f AND wfOscillosc) <> 0 THEN DoDeactivate(wOscillosc);
  232.     IF (f AND wfMenus)     <> 0 THEN DoDeactivate(wMenus);
  233.     IF (f AND wfSmallPart) <> 0 THEN DoDeactivate(wPartSmall);
  234.     IF (f AND wfBigPart)   <> 0 THEN DoDeactivate(wPartBig);
  235.     IF (f AND wfCredits)   <> 0 THEN DoDeactivate(wCredits);
  236.  
  237.     ActiveWindows := ActiveWindows AND NewWins;
  238.   END;
  239.  
  240.  
  241. PROCEDURE ActivateWins(NewWins: WORD);
  242.   VAR
  243.     f : WORD;
  244.   BEGIN
  245.     f := NewWins AND (NOT ActiveWindows) ;
  246.     IF (f AND wfTopLine)   <> 0 THEN   DoActivate(wTopLine,   TopLineHandle);
  247.     IF (f AND wf2ndLine)   <> 0 THEN   DoActivate(w2ndLine,   _2ndLineHandle);
  248.     IF (f AND wfSamples)   <> 0 THEN   DoActivate(wSamples,   SamplesHandle);
  249.     IF (f AND wfOscillosc) <> 0 THEN   DoActivate(wOscillosc, OscilloscHandle);
  250.     IF (f AND wfMenus)     <> 0 THEN   DoActivate(wMenus,     MenusHandle);
  251.     IF (f AND wfSmallPart) <> 0 THEN BEGIN
  252.                                        DoActivate(wPartSmall, SmallPartHandle);
  253.                                        SetSmallPartWindow;
  254.                                      END;
  255.     IF (f AND wfBigPart)   <> 0 THEN BEGIN
  256.                                        DoActivate(wPartBig,   BigPartHandle);
  257.                                        SetBigPartWindow;
  258.                                      END;
  259.     IF (f AND wfCredits)   <> 0 THEN   DoActivate(wCredits,   CreditsHandle);
  260.  
  261.     ActiveWindows := ActiveWindows OR NewWins;
  262.   END;
  263.  
  264.  
  265. PROCEDURE SetCredits;
  266.   BEGIN
  267.     DeactivateWins(CreditWins);
  268.     ActivateWins(CreditWins);
  269.   END;
  270.  
  271.  
  272. PROCEDURE SetBig;
  273.   BEGIN
  274.     DeactivateWins(BigWins);
  275.     ActivateWins(BigWins);
  276.   END;
  277.  
  278.  
  279. PROCEDURE SetSmall_Samples;
  280.   BEGIN
  281.     DeactivateWins(Small_SamplesWins);
  282.     ActivateWins(Small_SamplesWins);
  283.   END;
  284.  
  285.  
  286. PROCEDURE SetSmall_Oscillosc;
  287.   BEGIN
  288.     DeactivateWins(Small_OscilloscWins);
  289.     ActivateWins(Small_OscilloscWins);
  290.   END;
  291.  
  292.  
  293. PROCEDURE SetNothing;
  294.   BEGIN
  295.     DeactivateWins(0);
  296.     ActivateWins(0);
  297.   END;
  298.  
  299.  
  300. PROCEDURE SetUser(w: WORD);
  301.   BEGIN
  302.     DeactivateWins(w);
  303.     ActivateWins(w);
  304.   END;
  305.  
  306.  
  307. PROCEDURE RefreshVTScreens;
  308.   VAR
  309.     i : WORD;
  310.   BEGIN
  311.     i := ActiveWindows;
  312.     SetUser(0);
  313.     SetUser(i);
  314.   END;
  315.  
  316.  
  317.  
  318.  
  319. END.
  320.